const { exec } = require('node:child_process');
const path = require('path');
const { promisify } = require('util');

const execAsync = promisify(exec);

console.log('🚀 开始顺序安装项目依赖...');

async function installDependencies() {
  try {
    // 1. 安装Python依赖
    console.log('🐍 开始安装Python依赖...');
    try {
      const { stdout, stderr } = await execAsync('pip install -r requirements.txt');
      console.log('🐍 Python依赖安装完成');
      if (stdout) console.log(stdout);
      if (stderr) console.error(stderr);
    } catch (error) {
      console.error('Python依赖安装错误:', error.message);
      throw error;
    }

    // 2. 安装根目录Node依赖
    console.log('📦 开始安装根目录Node依赖...');
    try {
      const { stdout, stderr } = await execAsync('npm install --progress=true --loglevel=verbose');
      console.log('📦 根目录Node依赖安装完成');
      if (stdout) console.log(stdout);
      if (stderr) console.error(stderr);
    } catch (error) {
      console.error('根目录依赖安装错误:', error.message);
      throw error;
    }

    // 3. 安装前端依赖
    console.log('🖥️ 开始安装前端依赖...');
    const frontendPath = path.join(__dirname, '../frontend');
    try {
      const { stdout, stderr } = await execAsync('npm install --progress=true --loglevel=verbose', { cwd: frontendPath });
      console.log('🖥️ 前端依赖安装完成');
      if (stdout) console.log(stdout);
      if (stderr) console.error(stderr);
    } catch (error) {
      console.error('前端依赖安装错误:', error.message);
      throw error;
    }

    console.log('✅ 所有依赖安装完成！');
    console.log('现在可以运行: npm run dev');
  } catch (error) {
    console.error('❌ 依赖安装过程中出现错误，请检查上述错误信息');
    process.exit(1);
  }
}

installDependencies();